package Thread;/*
 *
 *@author:    Xavier
 *@data:      2024 - 01 - 13
 *@time:      09:52
 *
 */


// wait notify 用来协调线程顺序的工具，其中一个最典型的场景，就是避免“线程饿死/线程饥饿”
//都是Object提供的方法


//wait
//wait在执行的时候，会做的三件事
//1、解锁，object.wait 会尝试针对objuect对象解锁
//2、阻塞等待
//3、当被其他线程唤醒之后，就会尝试重新加锁，加锁成功，wait执行完毕
//   继续往下执行其他逻辑
public class Demo14 {
    public static void main(String[] args) throws InterruptedException {
        Object object = new Object();
        synchronized (object) {
            object.wait();
        }
        //这里的wait就会一直阻塞到其他线程进行notify了

        System.out.printf("wait over");



//        try {
//            object.wait();//Unhandled exception: java.lang.InterruptedException - 当wait引起线程阻塞之后
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);
//        }
        // 是可以使用interrupt 方法，把线程唤醒，打断当前线程的阻塞状态的
    }
}



//IllegalMonitorStateException - 锁状态异常
// Illegal - 非法的
// Monitor - 监视器 ->指的也是synchronized
// State   - 状态
// Exception    - 异常